home *** CD-ROM | disk | FTP | other *** search
- ;* UTILITY.S
- ;************************************************************************
- ;* *
- ;* PC Scheme/Geneva 4.00 Scheme code *
- ;* *
- ;* (c) 1985-1988 by Texas Instruments, Inc. See COPYRIGHT.TXT *
- ;* (c) 1992 by L. Bartholdi & M. Vuilleumier, University of Geneva *
- ;* *
- ;*----------------------------------------------------------------------*
- ;* *
- ;* Scoops: Miscellanea *
- ;* *
- ;*----------------------------------------------------------------------*
- ;* *
- ;* Created by: Amitabh Srivastava Date: 1986 *
- ;* Revision history: *
- ;* - 18 Jun 92: Renaissance (Borland Compilers, ...) *
- ;* *
- ;* ``In nomine omnipotentii dei'' *
- ;************************************************************************
-
- ; Error handler. Looks up the error message in the table and
- ; prints it.
-
- (define error-handler
- (let ((error-table
- (let ((table (make-vector 8)))
- (vector-set! table 0 " Invalid class definition ")
- (vector-set! table 1 " Invalid option ")
- (vector-set! table 2 " Class not defined ")
- (vector-set! table 3 " Method has been deleted ")
- (vector-set! table 4 " Method is not present ")
- (vector-set! table 5 " Variable is not present")
- (vector-set! table 6 " Not a Scoops Class")
- (vector-set! table 7 " Class not compiled ")
- table)))
- (lambda (msg number flag)
- (if flag
- (error (vector-ref error-table number) msg)
- (bkpt (vector-ref error-table number) msg)))))
-
-
- ; some functions defined globally which will be moved locally later
-
- (define %sc-class-description
- (lambda (class)
- (writeln " ")
- (writeln " CLASS DESCRIPTION ")
- (writeln " ================== ")
- (writeln " ")
- (writeln " NAME : " (%sc-name class))
- (writeln " CLASS VARS : "
- (mapcar car (%sc-allcvs class)))
- (writeln " INSTANCE VARS : "
- (mapcar car (%sc-allivs class)))
- (writeln " METHODS : "
- (mapcar car (%sc-method-structure class)))
- (writeln " MIXINS : " (%sc-mixins class))
- (writeln " CLASS COMPILED : " (%sc-class-compiled class))
- (writeln " CLASS INHERITED : " (%sc-class-inherited class))
- ))
- ;
-
- (define %sc-inst-desc
- (lambda (inst)
- (letrec ((class (access %sc-class inst))
- (printvars
- (lambda (f1 f2)
- (if f1
- (begin
- (writeln " " (caar f1) " : "
- (cdr (assq (caar f1) f2)))
- (printvars (cdr f1) f2))))))
- (writeln " ")
- (writeln " INSTANCE DESCRIPTION ")
- (writeln " ==================== ")
- (writeln " ")
- (writeln " Instance of Class " (%sc-name class))
- (writeln " ")
- (writeln " Class Variables : ")
- (printvars (%sc-allcvs class)
- (environment-bindings (%sc-class-env class)))
- (writeln " ")
- (writeln "Instance Variables :")
- (printvars (%sc-allivs class) (environment-bindings inst))
- )))
- ;
-
- (define describe
- (lambda (class-inst)
- (if (vector? class-inst)
- (begin
- (%scoops-chk-class class-inst)
- (%sc-class-description class-inst))
- (%sc-inst-desc class-inst))))
-
-
- (define %scoops-chk-class-compiled
- (lambda (name class)
- (or (%sc-class-compiled class)
- (error-handler name 7 #T))))
-
- ; (rename-class (class new-name))
-
- (macro rename-class
- (lambda (e)
- (let ((class (caadr e))
- (new-name (cadadr e)))
- `(begin
- (%sc-name->class ',class)
- (%sc-set-name ,class ',new-name)
- (set! (access ,new-name user-initial-environment) ,class)
- (putprop ',new-name ,new-name '%class)
- ',new-name))))
-
- ; (getcv class var)
-
- (macro getcv
- (lambda (e)
- (let ((class (cadr e))
- (var (caddr e)))
- `(begin
- (and (%sc-name->class ',class)
- (%scoops-chk-class-compiled ',class ,class))
- (send (%sc-class-env ,class) ,(%sc-concat "GET-" var))))))
-
- ; (setcv class var val)
-
- (macro setcv
- (lambda (e)
- (let ((class (cadr e))
- (var (caddr e))
- (val (cadddr e)))
- `(begin
- (and (%sc-name->class ',class)
- (%scoops-chk-class-compiled ',class ,class))
- (send (%sc-class-env ,class) ,(%sc-concat "SET-" var) ,val)))))
-
- ; (class-compiled? class)
-
- (define class-compiled?
- (lambda (class)
- (%scoops-chk-class class)
- (%sc-class-compiled class)))
-
-
- ; (class-of-object object)
-
- (define class-of-object
- (lambda (obj)
- (%sc-name (access %sc-class obj))))
-
- ; (name->class name)
-
- (define name->class
- (lambda (name)
- (%sc-name->class name)))
-
- ;
-
- (define %sc-class-info
- (lambda (fn)
- (lambda (class)
- (%scoops-chk-class class)
- (mapcar car (fn class)))))
-
- ;
-
- (define methods (%sc-class-info %sc-method-values))
-
- ;
-
- (define all-methods (%sc-class-info %sc-method-structure))
-
- ;
-
- (define classvars (%sc-class-info %sc-cv))
-
- ;
-
- (define all-classvars (%sc-class-info %sc-allcvs))
-
- ;
-
- (define instvars (%sc-class-info %sc-iv))
-
- ;
-
- (define all-instvars (%sc-class-info %sc-allivs))
-
-
- ;
-
- (define mixins
- (lambda (class)
- (%scoops-chk-class class)
- (%sc-mixins class)))
-